import './assets/main.css'
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

const app = createApp(App)

// 注册所有图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

app.use(router)
app.use(store)
app.use(ElementPlus)

// 先初始化认证状态，然后再挂载应用
// 这样可以确保路由守卫在app挂载前已经有正确的认证状态
async function initApp() {
  try {
    console.log('开始初始化应用...');
    
    // 从localStorage获取认证信息
    const token = localStorage.getItem('token');
    const userId = localStorage.getItem('userId');
    const username = localStorage.getItem('username');
    const role = localStorage.getItem('role');
    
    // 判断用户是否已登录(有userId和role就认为已登录)
    const isLoggedIn = (userId && username && role) ? true : false;
    
    // 清理可能存在的无效token格式
    if (token && token.startsWith('"') && token.endsWith('"')) {
      try {
        const cleanToken = JSON.parse(token);
        localStorage.setItem('token', cleanToken);
        console.log('清理了localStorage中的token格式');
      } catch (e) {
        // 继续使用原始token
      }
    }
    
    // 初始化认证状态
    await store.dispatch('initializeAuth');
    
    // 同步购物车
    await store.dispatch('syncCartFromLocalStorage');
    
    // 检查是否有上次访问的页面，以便在刷新时恢复
    const lastRoute = localStorage.getItem('lastRoute');
    if (isLoggedIn && lastRoute) {
      console.log('恢复上次访问页面:', lastRoute);
      // 如果用户已登录且有上次访问的页面，则导航到该页面
      await router.push(lastRoute).catch(err => {
        console.warn('导航到上次页面失败:', err);
        // 如果导航失败，清除lastRoute
        localStorage.removeItem('lastRoute');
      });
    }
    
    // 一切就绪后挂载应用
    app.mount('#app');
    console.log('应用已挂载，认证状态已初始化');
  } catch (error) {
    console.error('初始化应用失败:', error);
    // 出现严重错误，清除所有认证信息重新开始
    localStorage.removeItem('token');
    localStorage.removeItem('role');
    localStorage.removeItem('username');
    localStorage.removeItem('userId');
    localStorage.removeItem('lastRoute');
    
    // 即使失败也要挂载应用，但用户可能需要重新登录
    app.mount('#app');
    console.log('应用已挂载，但认证状态初始化失败，用户需要重新登录');
  }
}

// 启动应用
initApp();
